package com.hcxdi.api;

import android.text.TextUtils;

import com.hcxdi.api.convert.FileRequestBodyConverterFactory;

import java.net.URI;

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.fastjson.FastJsonConverterFactory;

/**
 * 货车兄弟API
 * @author 成都青桔科技有限公司
 * @version 1.0
 */
public class HcxdiAPI {
    /**
     * @title 货车兄弟API实例
     */
    private static HcxdiAPI instance;
    /**
     * 网络库
     */
    private Retrofit mRetrofit;
    /**
     *主机地址
     */
    private String mBaseUrl;

    /**
     * 构造货车兄弟API服务
     * @param okHttpClient 依赖网络请求库
     * @param baseUrl 主机地址
     */
    private HcxdiAPI(OkHttpClient okHttpClient,String baseUrl) {
        mBaseUrl=baseUrl;
        if (TextUtils.isEmpty(mBaseUrl)){
            new NullPointerException("基础地址不允许为空");
            return;
        }

       /* if (URI.create(mBaseUrl).getHost()==""){
                return;
        }*/

         mRetrofit = new Retrofit.Builder()
                .baseUrl(mBaseUrl)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .addConverterFactory(FastJsonConverterFactory.create())
                .addConverterFactory(new FileRequestBodyConverterFactory())
                .client(okHttpClient)
                .build();
    }

    /**
     * 创建API服务
     * @param service 需要创建的服务
     * {@link  AuthService 登陆服务 }
     * {@link  ActivityService 活动服务 }
     * {@link  UserService 用户服务 }
     * @param <T> 创建的服务返回的数据类型
     * {@link  com.hcxdi.api.bean.base.Rsp 登陆返回结果 }
     * @return 货车兄弟API服务
     * {@link  AuthService 登陆服务 }
     * {@link  ActivityService 活动服务 }
     * {@link  UserService 用户服务 }
     */
    public   <T> T createService(final Class<T> service){
        T _service = mRetrofit.create(service);
        return _service;
    }

    /**
     * 货车兄弟API实例
     * @param okHttpClient 依赖网络请求库
     * @return 货车兄弟API实例
     */
    public static HcxdiAPI getInstance(OkHttpClient okHttpClient,String baseUrl) {
        if (instance == null)
            instance = new HcxdiAPI(okHttpClient,baseUrl);
        return instance;
    }

}
